/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamanpospendapatanunit;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.sadhar.sia.common.ClassConnection;

/**
 *
 * @author kris
 */
public class PerekamanPosPendapatanUnitImpl implements PerekamanPosPendapatanUnitDAO {

    public PerekamanPosPendapatanUnitImpl() {
        ClassConnection.getTransactionProxyFactoryBean().setTarget(this);
    }

    public List<Map> getUnitKerja() {
        List<Map> result = ClassConnection.getJdbc().queryForList("SELECT * FROM kamus.unkerja ORDER BY idIndukUnitKerja ASC");
        return result;
    }

    public List<Map> getUnitKerjaAndPendapatanByTahun(String tahun) throws Exception {
        String sql = "select *from ppmk.posAnggaranPendapatanUnit pap ,kamus.unkerja uk,ppmk.posPendapatan pp " +
                " where uk.Kd_unit_kerja=pap.kodeUnitKerja" +
                " and pap.idPosPendapatan=pp.idPosPendapatan" +
                " and pap.tahunAnggaran=? order by posPendapatan,Nama_unit_kerja";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});       
        String currentPosPendapatan = "";
        String currentNama = "";
        for (Map map : result) {
            if (currentPosPendapatan.equalsIgnoreCase(map.get("posPendapatan").toString())) {
                map.put("posPendapatan", "");
                map.put("posPendapatanHidden", currentPosPendapatan);
            } else {
                currentPosPendapatan = map.get("posPendapatan").toString();
                map.put("posPendapatanHidden", "");

            }
            if (currentNama.equalsIgnoreCase(map.get("Nama_unit_kerja").toString())) {
                map.put("Nama_unit_kerja", "");
                map.put("nama", currentNama);
            } else {
                currentNama = map.get("Nama_unit_kerja").toString();
                map.put("nama", "");
            }
            
        }
        return result;
    }

    public List<Map> getUnitKerjaAndPendapatan() throws Exception {
        String sql = "select *from ppmk.posAnggaranPendapatanUnit pap ,kamus.unkerja uk,ppmk.posPendapatan pp " +
                " where uk.Kd_unit_kerja=pap.kodeUnitKerja" +
                " and pap.idPosPendapatan=pp.idPosPendapatan order by posPendapatan";

        List<Map> result = ClassConnection.getJdbc().queryForList(sql);
        String currentPosPendapatan = "";
        for (Map map : result) {
            if (currentPosPendapatan.equalsIgnoreCase(map.get("posPendapatan").toString())) {
                map.put("posPendapatan", "");
                map.put("posPendapatanHidden", currentPosPendapatan);
            } else {
                currentPosPendapatan = map.get("posPendapatan").toString();
                map.put("posPendapatanHidden", "");

            }

            //namaUnit.add(map);
            // posPendapatan.add(map);
        }
        return result;
    }

    public List<Map> getPosPendapatan(String keySearch) throws Exception {
        String sql = "select *from ppmk.posPendapatan pp where pp.posPendapatan LIKE ? ";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{"%" + keySearch + "%"});
        return result;
    }

    public void insert(PerekamanPosPendapatanUnit pendapatanUnit) throws Exception {
        String sql = "INSERT INTO ppmk.posAnggaranPendapatanUnit(tahunAnggaran,kodeUnitKerja,idPosPendapatan) VALUES(?,?,?)";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    pendapatanUnit.getTahunAnggaran(),
                    pendapatanUnit.getKodeUnitKerja(),
                    pendapatanUnit.getIdPosPendapatan()});
    }

    public void delete(String tahun, int idPosAnggaranPendapatan) throws Exception {
        String sql = "DELETE FROM ppmk.posAnggaranPendapatanUnit where tahunAnggaran=? AND idPosAnggaranPendapatanUnit=?";
        ClassConnection.getJdbc().update(sql, new Object[]{tahun, idPosAnggaranPendapatan});
    }

    public void update(PerekamanPosPendapatanUnit pendapatanUnit) throws Exception {
        String sql = "UPDATE ppmk.posAnggaranPendapatanUnit set kodeUnitKerja=?, idPosPendapatan=?" +
                " WHERE tahunAnggaran=? AND idPosAnggaranPendapatanUnit=?";
        ClassConnection.getJdbc().update(sql, new Object[]{
                    pendapatanUnit.getKodeUnitKerja(),
                    pendapatanUnit.getIdPosPendapatan(),
                    pendapatanUnit.getTahunAnggaran(),
                    pendapatanUnit.getIdPosAnggaranPendapatanUnit()
                });
    }

    public List<Map> getTahunAnggaranPendapatanUnit(String tahun) throws Exception {
        String sql = "SELECT distinct tahunAnggaran FROM ppmk.posAnggaranPendapatanUnit where tahunAnggaran <> ?";
        List<Map> result = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun});
        return result;
    }

    public List<Map> getPosPendapatanAndNamaUnitKerjaByIdAndTahun(String kodeUnitKerja, int idPosPendapatan, String tahun) throws Exception {
        String sql = "SELECT * FROM ppmk.posAnggaranPendapatanUnit WHERE kodeUnitKerja=? AND idPosPendapatan=? AND tahunAnggaran=?";
        List<Map> map = ClassConnection.getJdbc().queryForList(sql, new Object[]{kodeUnitKerja, idPosPendapatan, tahun});
        return map;
    }

    public List<Map> cekData(String tahun, String posPendapatan, String namaKerjaUnit) {
        System.out.println(tahun + " " + posPendapatan + " " + namaKerjaUnit);
        String sql = "select *from ppmk.posAnggaranPendapatanUnit pap ,kamus.unkerja uk,ppmk.posPendapatan pp " +
                "  WHERE uk.Kd_unit_kerja=pap.kodeUnitKerja " +
                "  AND pap.idPosPendapatan=pp.idPosPendapatan AND " +
                "  tahunAnggaran=? AND posPendapatan=? AND uk.Nama_unit_kerja=? " +
                "  order by posPendapatan";
        List<Map> map = ClassConnection.getJdbc().queryForList(sql, new Object[]{tahun, posPendapatan, namaKerjaUnit});
        return map;
    }
}
